package com.api.entity;


import com.api.log.FieldAnnotation;
import com.mybatisflex.annotation.*;
import com.mybatisflex.core.activerecord.Model;

import java.util.Date;
import java.util.List;


import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;

/**
* 系统码表 实体类。
*
* @author yangsf
* @since 2024-10-22
*/
@Accessors(chain = true)
@Data(staticConstructor = "create")
@EqualsAndHashCode(callSuper = true)
@Table("tb_sys_code")
public class SysCode extends Model<SysCode> {

private static final long serialVersionUID = 1L;

    /**
    * 主键ID
    */
    @Id(keyType = KeyType.Auto)
    @FieldAnnotation("id")
    private Long id;

    /**
    * 数据类型
    */
    @FieldAnnotation("数据类型")
    private String dataType;

    /**
    * 数据描述
    */
    @FieldAnnotation("数据描述")
    private String dataDesc;

    /**
    * 编码
    */
    @FieldAnnotation("编码")
    private Long codeNumber;

    /**
    * 名称
    */
    @FieldAnnotation("名称")
    private String codeName;

    /**
    * 类型描述
    */
    @FieldAnnotation("类型描述")
    private String codeDesc;

    /**
    * 上级编号
    */
    @FieldAnnotation("上级编号")
    private Long codePid;

    /**
    * 上级数据类型
    */
    @FieldAnnotation("上级数据类型")
    private String pidType;

    /**
    * 图标
    */
    @FieldAnnotation("图标")
    private String iconUrl;

    /**
    * 排序
    */
    @FieldAnnotation("排序")
    private Integer codeSort;

    /**
    * 类型标签
    */
    @FieldAnnotation("类型标签")
    private String codeTag;

    /**
    * 是否可选（1是0否）
    */
    @FieldAnnotation("是否可选（1是0否）")
    private Integer isShow;

    /**
    * 是否删除（1是0否）
    */
    @FieldAnnotation("是否删除（1是0否）")
    private Integer isDel;

    /**
    * 是否是系统预设(1.是0.否)
    */
    @FieldAnnotation("是否是系统预设(1.是0.否)")
    private Integer isSystem;

    /**
    * 添加时间
    */
    @Column(onInsertValue = "now()")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
    @FieldAnnotation("添加时间")
    private Date createTime;

    /**
    * 添加人id
    */
    @FieldAnnotation("添加人id")
    private Long createUserId;

    /**
    * 添加人名称
    */
    @FieldAnnotation("添加人名称")
    private String createUserName;

    /**
    * 描述
    */
    @FieldAnnotation("描述")
    private String remark;

    @RelationManyToOne(selfField = "codePid", targetField = "id")
    private SysCode parent;

    @RelationOneToMany(selfField = "id", targetField = "codePid")
    private List<SysCode> children;

}
